دسته
لينك هاي دسترسي سريع
مطالب من در ثبت مطالب روزانه
آرشیو
آمار وبلاگ
تعداد بازدید : 1052438
تعداد نوشته ها : 1368
تعداد نظرات : 348
Rss
طراح قالب
مهدي يوسفي
Day .41 روز یک تاریخ رو برمیگردونه.مثلا (Day(Now عدد 5 رو برمیگردونه.

DDB .42

DeleteSetting .43 تنظیماتی که با تابع SaveSetting توی رجستری ذخیره شده (value ها)رو پاک میکنه.واسه توضیح بیشتر به SaveSetting مراجع کنین.

Dir .44 فایل ها و فولدر های داخل یه فولدر(یا درایو) رو برمیگردونه.که میشه با مشخص کردن Attribute فایل ها یا فولدر های خاص رو بدست آورد.آرگومانی که میگیره یه رشتس که Path مورد نظر هستش که میشه توش از کاراکتر هایی مثل * و ؟ هم استفاده کرد.
مثلا میخوامیم همه ی فایل های با پسوند .sys رو که توی درایو C هستن بدست بیاریم.
برای اولین بار تابع Dir رو با دادن مقدار “C:\*.sys” فراخوانی میکنیم.مقدار برگشتیش اولین فایل با پسوند bat هست که توی درایو C (فقط درایو C یعنی شامل SubDirectory ها نمیشه) پیدا میکنه.برای بدست آوردن دومین فایل تابع رو بدون دادن مقدار بهش فراخوانی میکنیم ()Dir که مقدار برگشتیش همون دومین فایل هستش.این کار رو تا زمانی که مقدار برگشتی "" (رشته ی خالی) نباشه ادامه میدیم.کدش به این صورت میشه:

Private Sub CmdPrintDirs_Click()
Dim strPath as String,strDir as String
strPath = "C:\*.sys"
strDir = Dir(strPath)
Do
Print strDir
strDir = Dir()
Loop While strDir <> ""
End Sub

البته اگه Attribute رو درست تعیین نکنین همه فولدر ها و فایل ها برگردونده نمیشن.مثلا با قرار دادن این مقدار :
vbArchive Or vbDirectory Or vbHidden Or vbNormal Or vbReadOnly Or vbSystem
به جای Attribute میشه گفت همه فایل ها و فلدر ها (چه سیستم چه معمولی و...) برگردونده میشن.برای بدست آوردن فقط Directory ها به این صورت عمل کنین که به Attribute ، vbDirectoy رو هم اضافه کنین. بعد از اینکه اسم دایرکتوری ها رو گفتین باز هم با تابع GetAttr چک کنین که اسمی که برگردونده شده حتما Directory هستش :

Private Sub CmdPrintDirs_Click()
Dim strPath As String, strDir As String
strPath = "C:\"
strDir = Dir(strPath, vbDirectory)
Do
If (GetAttr(strPath & strDir) And vbDirectory) = vbDirectory Then
Print strDir
End If
strDir = Dir()
Loop While strDir <> ""
End Sub

اینو نگفتم که اگه بعد از مسیری که مشخص کردین اینجا (\:c) چیزی نگذارین همه فایل ها و فولدر هاش در نظر گرفته میشن.

DoEvents .45 این تابع رو وقتی دارین توی برنامتون از یک حلقه تکرار که ممکنه تموم شدنش طول بکشه استفاده میکنین توی حلقه فراخوانی کنین.حالا چکار میکنه؟
بطور عادی وقتی دارین توی یه حلقه تکرار(یا هر کدی!!) یکسری محاسبات رو انجام میدین تا زمانی که حلقه تموم نشه برنامتون در مقابل Message هایی که بش ارسال میشه عکس العملی انجام نمیده و همه عکس العمل ها رو بعد از تموم شدن حلقه انجام میده و یا اگه شما توی حلقه یه کدمربوط به چاپ کردن یه رشته روی فرم رو نوشته باشین عمل چاپ شدن رو بعد از تمام شدن حلقه مشاهده میکنین.به قولی تا زمان پایان حلقه برنامه هیچ Event ی انجام نمیده(البته این مساله 100 در 100 هم نیست).تابع DoEvents این کار رو براتون میکنه.این دو کد رو تست کنین :

Private Sub Command1_Click()
Dim i As Long
Do While i < 10000000
i = i + 1
If i < 20 Then List1.AddItem i
Loop
End Sub
Private Sub Command1_Click()
Dim i As Long
Do While i < 10000000
i = i + 1
If i < 20 Then List1.AddItem i
DoEvents
Loop
End Sub

وقتی دکمه رو توی کد اول فشار میدین تا زمانی که حلقه تموم نشده نمیتونین اعضای اضافه شده رو توی لیست باکس ببینین یا فرم رو حرکت بدین.در صورتی که در کد دوم این طور نیست.

46. Environ (و Environ$) این تابع با گرفتن عدد ها(اینجا index ها) ی بیشتر از 0 و یا رشته ها اطلاعات خاصی از سیستم مثل دایرکتوری ویندوز Program Files ، Temp و یا UserName یا تعداد پردازشگر ها و ... رو برمیگردونه.با دادن عدد های مختلف از 1 به بالا مقدار های مختلفش رو میتونین ببینین.رشته هایی رو هم میگیره مثل WinDir یا OS یا SystemDrive یا ... که این رشته ها رو با استفاده از اعداد میتونین بدست بیارین :

Private Sub Command1_Click()
Dim strEv As String, i As Integer
i = 1
Do
strEv = Environ(i)
Print strEv
i = i + 1
Loop While strEv <> ""
End Sub

EOF .47 برای کار با فایل هاست که با دادن شماره ای که باهاش فایل رو باز کردین میتونین بفهمین به آخر فایل رسیدین یا نه.

Err .48 آبجکتیه که اطلاعات مربوط به آخرین خطایی(منظور Runtime Error) که توی کد اتفاق افتاده رو نگه میداده.مثلا :
Err.Number شماره خطا Err.Clear پاک کردن خطا (همه اطلاعات در مورد آخرین حذف میشه و فرض بر این میشه که خطایی اتفاق نیفتاده باشه) Err.Description توضیح خطا Err.Source منبع خطا.Err.Raise هم یه خطا تولید میکنه!!

Error .49 اگه این تابع رو برابر یه مقدار قرار نداره باشین کار Err.Raise رو میکنه با این فرق که فقط شماره خطا رو میگیره(به تعداد آرگومان هایی که میگیرن توجه کنین) (در این حالت میشه گفت اصلا تابع نیست!) در غیر این صورت توضیح خطایی که تولید کرده رو هم برمیگردونه

Error$ .50 فقط حالت دوم Error هستش

Exp .51 معادلش توی ریاضی e x

FileAttr .52 با گرفتن شماره ای که فایل باش باز شده Attribute هاش رو برمیگردونه.مثلا :

Private Sub Command1_Click()
Open "C:\io.sys" For Random As #1
If FileAttr(1) And vbSystem Then
MsgBox "This is a Syetem file!"
End If
Close #1
End Sub

FileCopy .53 واسه کپی کردن فایل هستش که آرگومان اولی آدرس فایل مبدا و بعدی مقصده.اگه فایل مقصد وجود داشته باشه عمل کپی انجام نمیشه.

FileDateTime آدرس یه فایل رو میگیره و زمان آخرین ویرایش یا زمانی که درست شده رو برمیگردونه.

FileLen .54 آدرس یه فایل رو میگیره و طولش رو برمیگردونه.(به بایت)

Fix .55 یه چیزی شبیه تابع براکت توی ریاضی هستش با این فرض که اعداد منفی رو رو به بالا گرد میکنه .مثلا:

Fix(2.1) = 2 و Fix(-2.1) = -2

Filter .56 یه آرایه رشته ای میگیره و آرایه ی جدیدی رو برمیگردونه به طوری که اون آرایه شامل عضو هایی از آرایه ی اول میشه که یک رشته ی خاص رو دارا هستن یا دارا نیستن.(تابع 2 حالت داره).آرگومان اول آرایه مورد نظره.دومی رشته ی مورد نظره.سومی اگه False باشه اون عضو هایی که شامل رشته نیستن انتخاب میشن و برگردونده میشن و اگه True باشه عضو هایی که شامل رشته هستن.بعدی هم نوع مقایسه هست که توی توضیح تابع InStr درموردش توضیح دادم.اونجا رو ببینین.
مثلا این آرایه رو تصور کنین :

Dim MainArr(3) As String
MainArr(0) = “Visual Basic”
MainArr(1) = “Visual C++”
MainArr(2) = “W32 Assembly”
MainArr(3) = “Java Script”

حالا ما میخوایم همه ی اون عضو هایی از MainArr که کلمه ی Visual داخلشون نیست رو توی یک آرایه دیگه ذخیره کنیم :

Dim NewArr() As String
NewArr = Filter(MainArr,”Visual”,False)

با این کد عضو های آرایه NewArr ، W32 Assembly و Java Script میشن.اگه به جای False از True استفاده میکردین عضو ها Visual Basic و++ Visual C میشدن.

Format .57 (و Format$)یه تابع پر کاربرده که کارهای زیادی در رابطه با رشته ها میکنه و اگه بخوام همشونو بگم به اندازه ای که تاحالا نوشتم باید بنویسم!!در کل یه رشته به عنوان آرگومان اول میگیره.دومی هم یه رشتس که Style یا حالت یا همون فرمت اون رشته رو تعیین میکنه .مثلا میخواهین با داشتن ثانیه – دقیقه و ساعت،زمان رو با فرمت درست بدست بیارین :

MsgBox (Format("125802", "00:00:00"))

و کار های زیاد دیگه ای میشه باش کرد که بیشتر از این حال نداریم توضیح بدم.خودتون دنبالش برین میفهمین... .

FormatCurrency .58 این تابع یه عدد رو به نوع Currency (نوعی که توی ویبی برای نگه داشتن مقدار پول بکار میره) با فرمت دلخواه تبدیل میکنه.آرگومان اول عدد مورد نظره.آرگومان های بعدی اختیاری هستن: دومی تعداد صفرهایی که بعد از عدد و نقطه ی آخر اون نشون داده میشن هستش که بطور پیشفرض 1-(Default) هستش و برای من 2 تا نشون میده مثلا 100 رو 100.00 نشون میده.

آرگومان بعدی مشخص میکنه که برای عدد های کسری .0 قبل از عدد رو نشون بده یا نه.بعدی مشخص میکنه که برای عدد های منفی از پرانتز استفاده بشه یا نه.بعدی مشخص میکنه که عدد هارو (سه تا سه تا) با کاما گروه بندی کنه یا نه.مثلا 100000 رو 10,000 نشون بده یا نه.یه مثال کلی : FormatCurrency(10000,3,vbTrue,vbTrue,vbTrue)مقدار 10,000.000$ رو برمیگردونه.
این رو هم بگم که آرگومان های 3 ، 4 و 5 به غیر از vbTrue و vbFalse مقدار vbUseDefault رو هم میتونن بگیرن که این مقدار به مقدار بیشفرض که به تنظیم های ویندوز بستگی داره ارجاع میکنه.

FormatDateTime .59 این تابع واسه تغییر فرمت زمان و تاریخ به کار میره.آرگومان اول تاریخ یا زمان مورد نظره .دومی هم فرمت مورد نظر.مقدار بازگشتی با توجه به نوع فرمت و نوع مقداری که بش دادیم فرق میکنه :

FormatDateTime(Now(), vbGeneralDate) = 10/5/2005 10:49:07 PM

FormatNumber .60 مثل FormatCurreny هستش با 2 تا فرق.یکی اینکه علامت دلار ($) کنار عدد نمیگذاره. یکی دیگه اینکه اگه مقدار منفی باشه و آرگومان 3 False ، علامت منفی رو کنار عدد نشون میده.
پنج شنبه بیست و ششم 10 1387
اموزش توابع داخلی Visual Basic ( نزدیک به 180 تابع )
ChrW .21 (و ChrW$) واسه کاراکتر های Unicode استفاده میشه.یعنی کد یه کاراکتر Unicode (فکر کنم بین 0 تا 2 بتوان 16) رو میگیره و یه کاراکتر Unicode برمیگردونه

CInt .22 تبدیل نوع یه مقدار به Integer

Circle .23 واسه رسم یه دایره ، بیضی ، قطاع یا کمان روی فرم هستش.مثلا
Circle(20,20),10,vbred,0,3.141,2 یه کمان با مرکز 20و20 و با شعاع 10 با رنگ قرمز از 0 تا پی رو طوری رسم میکنه که ارتفاعش 2 برابر عرضش هستش.برای رسم قطاع باید ارگومان های 4 و 5 منفی باشن.واسه رسم دایر بعد از vbred نیاز نیست مقدار بزارین.واسه رسم بیضی(کامل) آرگومان های 4 و 5 رو مقدار ندین در عوض با تغییر دادن آرگومان 6 میتونین بیضی های مختلفی رسم کنین.

Clng .24 واسه تغییر نوع یه مقدار به Long هستش

Cls .25 مثل دستور معادلش توی داس هستش.یعنی فرم رو پاک میکنه.

Command .26 و Command$ اون پارامتر هایی که به برنامه ارسال شدن رو برمیگردونن.مثلا وقتی برنامه رو با دستور
Project1.exe “-hidden” باز کنیم Command برابر “hidden-” میشه.

Cos .27 کسینویس زاویه ای که –بر حسب رادیان – بهش میدیم رو برمیگردونه.

CreateObject .28با گرفتن ClassName یک شی رو درست میکنه.مثلا

Set fso = CreateObject("Scripting.FileSystemObject")

آبجکت معروف FSO رو دست میکنه که خیلی هم توی ASP کاربرد داره.حالا که این آبجکت رو ساختین میتونین ازش استفاده کنین.مثلا واسه بدست آوردن پوشه temp :

MsgBox fso.getspecialfolder(2)

بعد از اینکه کارمون با شی تموم شد باید حافظه ای که بش اختصاص پیدا کرده رو آزاد کنیم :

Set FSO = Nothing

CSng .29-30 و CStr واسه تبدیل نوع یه مقدار به Single و String هستن.

CDir .31 و CDir$ هم دایرکتوری پیشفرض رو برمیگردونن(واسه توضیح بیشتر یه سر به chDir بزنین)

CVar .32 واسه تبدیل نوع یه مقدار به Var هست

CVDate .33 واسه تبدیل یه مقدار(رشته یا عدد) به نوع Date بکار میره.

CVErr .34 یه شماره خطا یا یه آبجک از نوع ErrObject میگیره و یه مقدار از نوع Error برمیگردونه مثلا : “Cstr(CVErr(13)) = “Error 13
اما اینکه به چه درد میخوره نمیدونم.اینم توضیح : MSDN

The CVErr function in Visual Basic 6.0 returned a Variant of the subtype Error that contained an error number

DateAdd .35 واسه کم یا زیاد کردن یه مقدار از یه تاریخ یا ساعت بکار میره.آرگومان اولی نوع مقداری که میخواهیم کم یا زیاد کنیم هستش که باید یکی از اینا باشه : s ثانیه n دقیقه h ساعت w روزهای هفته w هفته d روز(مثل 12) y روز از سال(مثل 224) m ماه q یک چهارم سال(فصل) yyyy سال.آرگومان دومی مقداریه که میخواهیم اضافه یا کم کنیم مثل 2 1 ... .آرگومان بعدی زمان یا تاریخ مورد نظره.
مثلا (()DateAdd(“m”,3,Date سه ماه به تاریخ فعلی(()Date) اضافه میکنه و تاریخ جدید رو برمیگردونه.

DateDiff .36 برای مقایسه کردن یکی از قسمت های 2 مقدار تاریخ هستش.ارگومان اول همون قسمت مورد نظره که مثل تابع قبلی مقدار دهی میشه.آرگومان دوم تاریخ1 بعدی تاریخ 2 هستش.مثلا (()DateDiff(“yyyy”,Date(),DateAdd(“yyyy”,3,Date مقدار 3 رو برمیگردونه.

DatePart .37 یک قسمت از یک تاریخ ( یا زمان) رو برمیگردونه.آرگومان اول مثل 2 تابع قبلیه.دومی هم تاریخ مورد نظر.مثلا (()DatePart(“h”,Time الان برای من 17 رو برمیگردونه (ساعت 5 بعد از ظهر).

DateSerial .39 روز و ماه و سال رو به عدد میگیره و تاریخ رو برمیگردونه.

DateValue .40 کار قبلی رو میکنه فقط مقدار رو یکجا(از نوع رشته) میگیره.مثلx (“DateValue(“2002/09/11 رو میگیره و تاریخ رو از نوع Date برمیگردونه.
پنج شنبه بیست و ششم 10 1387
اموزش توابع داخلی Visual Basic ( نزدیک به 180 تابع )

Abs .1 قدر مطلق یک عدد رو برمیگردونه

appActivate .2 عنوان یه پنجره رو میگیره و اونو فعال میکنه

Asc .3 یه کاراکتر میگیره و کد اسکی اون رو برمیگردونه (بین 0 تا 255) .اگه بهش رشته بدین کاراکتر اول رو بررسی میکنه .مثلاAsc(“A”)= 65

AscB .4 کار قبلی رو با بایت اول مقداری که بش میدیم انجام میده(نه با کاراکتر اول).خروجیش هم از نوع Byte هستش(قبلی Integer بود)

AscW .5 واسه کاراکتر های Unicode هستش یعنی مقدار کد کاراکتر Unicode (w مخفف Wide هستش) رو برمیگردونه که بین 0 تا 2 بتوان 16

Atn .6 آرک تانژانت مقداری رو که بش دادیم برمیگردونه.البته زاویه رو بر حسب رادیان برمیگردونه که اگه میخواهین بر حسب درجه بکنینش باید ضرب در 180 تقسیم بر پی بکنینش مثلا (180 * 3.14 * 1) Atnمقدار 45.0228246533569 رو برمیگردونه
البته برای بدست آوردن مقدار دقیق تر پی از (Atn(1) * 4) میتونین استفاده کنین.

Beep .7 صدای beep در میاره.

CallByName .8 با این تابع میشه با استفاده از اسم یه متد یا Property مربوط به یه شی که توی یه رشته هست متد رو فراخوانی کرد یا Property رو گرفت یا مقدار داد و ... .آرگومان اول شی مورد نظره مثل Command2 دومی متد یا Property مورد نظره مثل “Set Focus” یا “Caption” سومی نوع فراخوانییه که میخوانیم انجام بدیم .مثل vbLet مقدار دهی یه Property یا VbMethod واسه یه متد و ... .بعدی هم آرگومان هایی هستن که به اون متد باید ارسال بشن یا اگه بخواهیم Property رو عوض کنیم اون مقدار مورد نظرمون هست.اگه هم نیازی به آرگومان نباشه خالی میزاریمش.مثلا با این دستور :

CallByName Command2, "setFocus", VbMethod

فوکوس به Command2 اختصاص داده میشه یعنی کاره Command2.SetFocus رو میکنه.یا با این دستور :

CallByName Command2, "Caption", VbLet, "MyCaption!"

مقدار Caption دکمه 2 برابر MyCaption میشه

9 ta 14 . Cbool ، Cbyte،CCur ،CDate ، CDbl،CDec توابع تبدیل نوع هستن و نوع مقداری که میگیرن رو به نوعی که از اسمشون پیداست تبدیل میکنن مثلا CBool مقداری گه بش دادیم رو به نوع Boolean تبدیل میکنه.

chDir .15 دایرکتویری پیشفرض رو برای هر درایو عوض میکنه.مثلا (“chDir(“C:\windows دایرکتوری پیشفرض درایو C رو C:\Windows میکنه.بعد از این کد اگه تابع (“CurDir(“C رو فراخوانی کنین مقدار C:\windows (همون مقدار پیشفرض) برگردونده میشه.در صورتی که اگه chDir رو فراخوانی نمیکردین مقدار C:\windows\System32 رو برمیگردوند.

chDrive .16 درایو پیشفرض رو تعیین میکنه.در حالت عادی درایو پیشفرض همون درایویه که برنامه داخلش اجرا شده.یعنی وقتی تابع CurDir رو بدون دادن درایو فراخوانی کنین سراغ درایوی میره که برنامه توش اجرا شده.مثلا برای من که برنامم داره توی درایو D اجرا میشه CurDir قبل از فراخوانی (“:ChDrive(“C مقدار “D:\vb\myproj” رو برگردوند بعد از فراخوانی مقدار C:\windows\System32 رو.

Choose .17 از یه لیست ارگومان با گرفتن Index یکیشون رو برمیگردونه .مثلا

Choose(3, "Arg1", "Arg2", "Arg3", "Arg4", "Arg5")

مقدار “Arg3” رو برمیگردونه.

Chr .18 یه کد اسکی میگیره و کاراکتر مربوط به اون رو برمیگردونه.مثلا Chr(65) = “A”

Chr$ .19 مثل قبلیه فقط مقداری که برمیگردونه از نوع رشته هستش(بهتره از این به جای قبلی استفاده کنین)

ChrB .20 مثل Chr فقط همیشه یه مقدار تک بایتی Single-Byte برمیگردونه یعنی طول مقداری که برمیگردونه از لحاظ بایت 1 هستش در صورتی که برای تابع قبلی 2 مثلا توی حافظه : Chr(65) => 65 00 ولی 65 <=(ChrB(65
پنج شنبه بیست و ششم 10 1387
 اپراتور

این اپراتور برای تشخیص نوع کنترل به کار می رود.روش استفاده از ان به شکل زیر است

TypeOf ControlName Is ControlType

مثال:کنترلی از نوع فایل بوکس رابه تایع زیر می فرستیم یرای تعیین عضو انتخاب شده

Private Function GetSelectItem(LST as Contol) as String
if TypeOf lst is listbox then
GetselectItem=Lst.text:Exit Function
else :GetselectItem=Lst.FileName:Exit Sub
End if

در خط یک تابع با آرگومان یک لیست از نوع کنترل تعریف می شود خروجی تایپ آف به صورت یک منو مانند تعریف متغییر هنگام کد نویسی ظاهر می شود که شما می توانید نو ع کنترل خود را از داخل آن انتخاب کنید.توجه کنید بین تایپ و آف نباید فاصله بیفتد واگر نه با خطای کامپایل مواجه می شوید.

DoEvents اپراتور

این اپراتور برای ارجاع تمام عملییات به سی پی یو برای انجام می باشد.اکثرآ از این اپراتور برای مواقعی استفاده می گردد که یک عملیات وقتگیر در حال انجام است مانند اعمال افکت روی تصویر و حلقه های تکرار طولانی. این اپراتور در درون حلقه قرار گرفته و کامپایل نمی شود مانند رهنمود ها در پاسکال عمل می کندوبه سی پی یو می گوید تمام کارهیت را به صورت یکسان انجام بده واز اولویت ها صرف نظر کن .در برنامه هایی که یک عملیات در درون یک حلقه هر دور انجام می شود آکثرآ باعث هنک کردن آن برنامه تا پایان عملیات می شود.چون برنامه بین واکنش به تکان خوردن موس -جابه جاکردن برنامه یا بزرگ و کوچک کردن برنامه وپردازش روی عملیات مورد نظر(مثلآ کپی فایل)عملییاتی که دارای اولویت پردازش است را انتخاب می کند.این اپراتور در چنین مواقعی بسیار مفید است وباعث می شود کاربر گمان نکند که برنامه هنک کرده و آن را ببندد.مثال:ِ

For i=0 to list1.listCount -1
if list1.list(i)<>"" then call Copy(list1.list(i),App.path+"\")
DoEvents
Next

در خط اول حلقه ای از صفر تا تعداد اعناصر موجود در لیست اغازمی شودو در هر درو فایل درون لیست در صورت وجود کپی می شود .اگر فایل های مازیاد باشد DoEventsو اپراتور را ننویسیم حتمآ برنامه ما هنک می کند.باید یاد آور شد استفاده نابجا و بیش از اندازه این اپراتور موجب کاهش سرعت برنامه می شود.ِالبته

استفاده می کنندSleepبه نام APIباعث کارکرد زیاد وشدید سی پی یو می شود وبرخی ترجیح می دهند از آن استفاده نکنند ویه جای ان از یک

فرق می کند. اسلیپ باعث میشود سی پی یو تمام کار های در حال اجرا را رها کند وبه مدت زمانی که جلویDoEventsباید گفت کارکرد اسلیپ به طور کلی با

آن نوشته می شود به استراحت بپردازد.ِ

sleep با توجه به زمانی که براش تعیین میکنی در وسط کار برنامه مکث ایجاد میکنه و در آن زمان هیچ خطی از کد برنامه اجرا نمیشه و همان طور که از اسم تابع .مشخصه برنامه در آن زمان به خواب میره
اسلیپ زمانی که با محیط خارج از برنامه در ارتباطی خیلی مفیده. چون معمولا وقتی دستوری در وی بی مثل اجرای فلان فایل مدتی طول می کشد و تو این مدت دستورات بعدی سریع اجرا می شوند که ممکن است نتیجه اش به اجای فایل بستگی داشته با شه.اسلیپ باعث میشه به ویندوز فرصت بدی سایر دستورات فرستاده شده به خارج برنامه رو اجرا کنه. البته گاهی اوقات هم نمیدونیم چند ثانیه مکث کنیم و ممکنه مجبور شیم برای احتیاط زمان زیادی مکث کنیم که سرعت برنامه میاد پایین پس تا می تونیم از دستورات خود وی بی استفاده کنیم تا بر نامه های خارجی.ِ

Shell دستور

توسط این دستور می تونید فایلی را در وی بی اجرا کنید .آدرسی که جلوی این دستور نوشته می شه اجرا میشه .شکل این دستور به این صورت است:ِ

Shell ProgramPath,RunModel

در آرگومان اول مسیر فایل نوشته می شود ودر آرگومان دوم مدلی که برنامه باید اجرا شود.در این ارگومان از آرگومان های زیر استفاده می گردد

vbHide=0 vbMaximizedFocus=1 vbMinimizedFocus=2 vbMinimizedNoFocus=3 vbNormalFocus=4 vbNormalNoFocus=5

در مدل صفر برنامه به صورت پنهان ظاهر می شود.برای مواقعی که می خواهیم عمل اجرا را از دید کاربر پنهان کنیم .در مدل 2 برنامه اجرا می شود به صورت کمینه(روی منوی استارت-مینیمایز شده)وفاکس هم روی ان می رود یعنی این که بعد از اجرا هی زرد و آبی می شود تا کار بر روی آن کلیک کند.مدل 3برنامه به

صورت ینیمایز -کمینه اجرا می شود زرد وآبی نمی شود (معمولی-فاکس رویش نمی رود).مدل 1برنامه به صورت تمام صفحه اجرا شده فاکس هم روی آن می رود(زرد و ابی می شود).در مدل 4برنامه با اندازه پیش فرض اجرا می شودوفاکس را هم می گیرد.درمدل 5برنامه با اندازه معمولی اجرا شده و فاکس نمی گیرد

کار برد مهم دیگر شل اجرا فایل های معمولی با یک برنامه اجرایی است مثل اجرای یک متن در نت پد.برای این کار نام فایل را بایک فاصله از نام فایل می نویسیم

Shell "NotPath.Exe"+" C:\Text1.txt" ,4
پنج شنبه بیست و ششم 10 1387
فرمت فایل M3U
چگونه یک فایل PlayList با پسوند M3U بسازیم

گاهی وقتی عده ی زیادی فایل را در مدیا پلیر یا وینمپ باز می کنیم یک گزینه به نام SavePlaylist
می بینیم که برای ذخیره کردن آن لیست در یک فایل استفاده می شود.اگر یک برنامه ی پخش صوت یا تصویر باکنترل مدیا پلیر نیز بنویسید برای پخش هم زمان چندین فایل به مشکل برخواهید خورد .درچنین مواقعی می توانیم با ذخیره لیست در یک فایل ام تری یو وباز کردن آن در کنترل مدیا پلیر چندین فایل را با هم پخش کرد .شاید شما بتوانید فایل هایتان را مستقیمآ به لیست مدیا پلیر احتیاج به دانستن فرمت فایل ام تری یو داریدPlayListاضافه کنید ولی باز هم برای ذخیره

با این تابع این کار را انجام دهید

Public Sub SaveList(OutPath As String,Lst as ListBox)
On Error Resume Next '--------------------------------------------------
Dim T3 As String, T2, strans As String, L As Single, i As Integer
T3 = "": T2 = ""
If Lst.List(1) = "" Then
strans = MsgBox("File Not Found!", vbCritical)
Exit Sub '------------------------------------------------------
End If
If UCase(Right(OutPath, 3)) <> "M3U" Then Exit Sub
Open OutPath For Output As #1
Print #1, "#EXTM3U:"
For i = 1 To Lst.ListCount '----------------------------
Print #1, "#EXTNIF:"
Print #1, Lst.List(i)
Next i '------------------------------------------------------
Close #1
End Sub

حال برای زخیره کردن فایل های صوتی و تصویری موجود در یک لیست تنها به دستور زیر نیاز دارید

SaveList "C:\1.M3U",List1
پنج شنبه بیست و ششم 10 1387
برنامه های سه بعدی از فضا نمی آیند توسط همین وی بی -دلفی واکثرآ سی پلاس پلاس طراحی می شن وقتی یک بازی سه بعدی روباز می کنیم ویک دفعه یک صفحه با گرافیکی که تا حالا ندیدیم یه صورت زیبا بالا می آد اکثر ما -بیشتر خودم- خیلی کف میکنیم که این برنامه ها چطور ساخته می شن-با چی ساخته می شن

امروز می خوام تنظیم ابعاد صفحه نمایش ویندوز رو با ابعاد دلخواه خودمون بگم که گام اول طراحی سه بعدیه اگه بشه شاید مراحل بعدیش رو هم بزارم روی سایت که مونده به یاری شما .بانظراتتون و خدا با توفیقش

ابتدا متغییر های اول فرم

Dim Dx As New DirectX7
Dim Dd As DirectDraw4
Dim clip As DirectDrawClipper

البته بعد از نوشتن کد بالا به منوی پروژه رفته گزینه ریفرنس رو انتخاب کنید در منوی باز شده تیک گزینه ی دایرکت ایکس 7 رو بزنید

تا کد هاتون اجرا بشه روی فرم دابل کلاک کنید و کد زیر رو بنویسید

Set Dd = Dx.DirectDraw4Create("")
Set clip = Dd.CreateClipper(0)
clip.SetHWnd Me.hWnd
' screen mode
Dd.SetDisplayMode 800, 600, 32, 0, DDSDM_DEFAULT

بااین کد صفحه نمایش به مد 800*600و حالت 32بایتی میره
پنج شنبه بیست و ششم 10 1387
کلاس یک مجموعه ای از کدهاست که شبیه به یک کنترل هستند فقط شکل ظاهری و طراحی ندارند
کلاس ها شی هستند - یعنی خاصیت دارند -کلاس ها می توانند داخل خود پردازه یا تابع محلی وسراسری داشته باشند
کلاس به چه دردی می خورد-کلاسها از تکرار کدها جلو گیری می کنند -کلاس ها خوانایی برنامه را افزایش می دهندوغیره
کلاس ها می توانند به صورت خودکار خود را مقدار دهی کنند-یک ماژول کلاس ایجاد کنید وکدهای زیر را در آن کپی کنید

تعریف یک خاصیت در کلاس

'-----------Set Property Information---------

Public Poperty Let CWidth( Value As Integer)
CWidth=Value
End Property

'------------Get Property Information--------------

Public Property Get CWidth() As Integer
CWidth=CForm.Width
End Property

دستور اول خاصیت را مقدار دهی می کند با مقداری که کار بر فرستاده
دستور دوم برای دادن مقدار برای کابر است .البته هر کدام از این دستورات را می توان به صورت محلی استفاده کرد
وی بی با کلاس ها مانند یک نوع جدید رفتار می کند یعنی شما برای استفاده از یک کلاس در سطح فرم باید یک متغیر از
نوع کلاس تعریف کنید .تعرف یک متغییر محلی در سطح فرم

Private CForm As Form

تمام متغییر ها وتوابع وپردازه ها وحتی نام خود کلاس را با سی آغاز کنید تا معلوم شود مربوط به یک کلاس است
تعرف یک پردازه سراسری در کلاس

Private Sub CSetInfo(Frm As Form)
Set Form=Frm
End Sub

اگر تمام کدها بالا را درست در یک ماژول کلاس کپی کنید اکنون نوبت استفاده از کدهای بالاست
در خط اول فرم یک متغییر از نوع نام کلاس تعریف کنید.بدین صورت

Dim Calss As Class1
Private Sub Form_Resiz()
Me.Caption="Form1.Width: "& Class.With
End Sub
پنج شنبه بیست و ششم 10 1387
کوتاهترین راه برای ساخت یک ساعت روش زیر است یک Picturebox به فرم اضافه کنید

Private Sub Form_Load()
Static Score As Long
Counter.Show
DoEvents
Score = 0
For I = 1 To 1265
DisplayNumber 10, Score
Score = I
DoEvents
Next
End Sub'-------------------------------------------------------------------
Private Sub DisplayNumber(DisplayWidth As Integer, TheNumber As Long)
Dim DisplayString As String, Zeros As Integer, GraphicsHeight As Single
Dim DigitValue As Integer, NumPosition As Integer
'--------------------Start Time---------------
GraphicsHeight = Picture1.ScaleHeight / 2
Zeros = DisplayWidth - Len(Trim(TheNumber))
For I = 0 To Zeros - 1
DisplayString = DisplayString & "0"
Next
DisplayString = DisplayString & Trim(Str(TheNumber))
For I = 0 To DisplayWidth - 1
DigitValue = Val(Mid(DisplayString, I + 1, 1))
If DigitValue = 0 Then NumPosition = 10 Else NumPosition = DigitValue _
Counter.PaintPicture Picture1.Image, I * (Picture1.ScaleWidth / 10), 0, _
Picture1.ScaleWidth / 10, Picture1.ScaleHeight / 2, (NumPosition - 1) _
* (Picture1.ScaleWidth / 10), GraphicsHeight, Picture1.ScaleWidth / 10, Picture1.ScaleHeight / 2
Next
End Sub

در کد بالا به دلایلی فرم خارج نمی شود باید یک دکمه برای خروج از فرم تنظیم کنیدودر کد کلیک آن بنوسید
End
پنج شنبه بیست و ششم 10 1387
On Error GoTo B
Dim r%, F%, Heght%, Wath%, X%, Color$ '--\/\/\/ Set Color Of Form
Color = "Red_Black" '----------------تعیین تیف رنگ
Heigh = Me.Height + 200: Widt = Me.Width
F = Heigh \ 255: r = 0
Select Case Color
Case "Red_Black": GoTo 1
Case "With_Red": GoTo 2
Case "Green_Black": GoTo 3
Case "With_Green": GoTo 4
Case "Blue_Black": GoTo 5
Case "With_Blue": GoTo 6
Case "With_Black": GoTo 7
End Select
Exit Sub '---------------------------Main--------------------------------------------
1
For i = 0 To Heigh Step F
r = r + 1
If r = 20000 Then Exit For
For X = i To F + i
Me.Line (0, X)-(Widt, X), RGB(250 - r, 0, 0)
Next X
Next i: GoTo B
2 '--------------------------------------------------------------------------------
For i = 0 To Heigh Step F
r = r + 1
If r = 20000 Then Exit For
For X = i To F + i
Me.Line (0, X)-(Widt, X), RGB(250, 254 - r, 255 - r)
Next X
Next i: GoTo B
3 '--------------------------------------------------------------------------------
For i = 0 To Heigh Step F
r = r + 1
If r = 20000 Then Exit For
For X = i To F + i
Me.Line (0, X)-(Widt, X), RGB(0, 250 - r, 0)
Next X
Next i: GoTo B
4 '--------------------------------------------------------------------------------
For i = 0 To Heigh Step F
r = r + 1
If r = 20000 Then Exit For
For X = i To F + i
Me.Line (0, X)-(Widt, X), RGB(250 - r, 255, 255 - r)
Next X
Next i: GoTo B
5 '--------------------------------------------------------------------------------
For i = 0 To Heigh Step F
r = r + 1
If r = 255 Then Exit For
For X = i To F + i
Me.Line (0, X)-(Widt, X), RGB(0, 0, 250 - r)
Next X
Next i: GoTo B
6 '--------------------------------------------------------------------------------
For i = 0 To Heigh Step F
r = r + 1
If r = 20000 Then Exit For
For X = i To F + i
Me.Line (0, X)-(Widt, X), RGB(250 - r, 250 - r, 255)
Next X
Next i: GoTo B
7 '--------------------------------------------------------------------------------
For i = 0 To Heigh Step F
r = r + 1
If r = 9000 Then Exit For
For X = i To F + i
Me.Line (0, X)-(Widt, X), RGB(250 - r, 250 - r, 250 - r)
Next X
Next i '--------------------------------------------------------------------------------
B:
Set Me.Picture = Me.Image

میتونید این کد رو خیلی کوتاه استفاده کنید وهرخط چینی که مربوط به رنگ خودتونه رو نگه دارید بقیه رو حذف کنید.با کمی دقت می توانید رنگ های جدید بسازید
پنج شنبه بیست و ششم 10 1387
Private Declare Function SetPixelV Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Byte
Private Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long

Private Sub CmdBrightness_Click()
'variables for brightness, color calculation, positioning
Dim Brightness As Single
Dim NewColor As Long
Dim x, y As Integer
Dim r, g, b As Integer
'change the brightness to a percent
Brightness = TxtBrightness / 100
'run a loop through the picture to change every pixel
For x = 0 To Picture1.ScaleWidth
For y = 0 To Picture1.ScaleHeight
'get the current color value
NewColor = GetPixel(Picture1.hDC, x, y)
'extract the R,G,B values from the long returned by GetPixel
r = (NewColor Mod 256)
b = (Int(NewColor / 65536))
g = ((NewColor - (b * 65536) - r) / 256)
'change the RGB settings to their appropriate brightness
r = r * Brightness
b = b * Brightness
g = g * Brightness
'make sure the new variables aren't too high or too low
If r > 255 Then r = 255
If r < 0 Then r = 0
If b > 255 Then b = 255
If b < 0 Then b = 0
If g > 255 Then g = 255
If g < 0 Then g = 0
'set the new pixel
SetPixelV Picture1.hDC, x, y, RGB(r, g, b)
'continue through the loop
Next y
'refresh the picture box every 10 lines (a nice progress bar effect)
If x Mod 10 = 0 Then Picture1.Refresh
Next x
'final picture refresh
Picture1.Refresh
End Sub

احتیاج دارید که متن درون آن به درصد برابر میزان روشنایی استTxtBrightnessیک کادر متن به نامCmdBrightnessحال کردین با توضیحات کامل برای کد بالا یک کامند به نام
پنج شنبه بیست و ششم 10 1387
این خط رو در اولین خط کد فرم بنویسید-برای مبتدی ها

Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long

طریقه استفاده
Private Sub Form_load()
Dim W, H
W = Screen.Width / 15
H = Screen.Height / 15
StretchBlt hdc, 0, 0, W, H, GetDC(0&), 0, 0, W, H, vbSrcCopy
End Sub

کشیدن یک دایره روی فرم با کد نویسی-نمودار دایره ای-بیضی
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
PI = 3.14159265
For i = 0 To 161 Step 10
Me.Circle (219, 167), i, RGB(0, 0, 0), 360 * (PI / 180), 360 * (PI / 180), 1
Next
End Sub

آنرا به 3 تغییر دهید.داشتم می گفتم پارامتر سوم برای شعاع دایره -اندازه آن-پارامتر چهارمscalmode توضیحات: پارامتر اول ودوم مکان ترسیم دایره اگر دایره در فرم شما رسم نشد خاصیت
برای رنگ پنجم برای نقطعه شروع وششم برای نقطه ی پایان این دو تا برای رسم نمودار دایره ای بکار می روند.پارامتر آخر هم برای رسم بیضی استفاده می شود

چگونه می توان یک مداد درست کرد مانند برنامه نقاشی ویندوز
کد زیر را در MouseMove بنویسید
If Button <> vbright Then Me.PSet (X, Y)

چطور می توان یک قطره چکان درست کرد که روی هر گزینه رفت رنگ پیش فرض رنگ انجا شود
عکس بنویسیدMouseMoveبه فرم اضافه کنید یک عکس داخل کادر عکس قرار دهید و کدزیر را در رویدادPictureویکLabelیک

Label1.BackColor=Picture1.Point(X,Y)

چطور می توان یک عکس را معکوس کرد
منظورت ازمعکوس اگه معکوس خود عکس در طراحی باشه کد زیر جوابش هست

With Picture1
.PaintPicture .Picture, 0, .Height, .Width, -.Height
End With

ولی اگه منظورت معکوس رنگ باشه کد زیر جوابش هست
With Picture1
.PaintPicture .Picture, 0, 0, , , , , , , vbDstInvert
End With

یرای موقعی به کار می رود که از یک اسم زیاداستفاده می کنیم.اسم را جلوی آن مینویسیم وهر وقت یک دات بزنیم قابل استفاده استWithتوضیحات:ِ
پارامتر اول یرای عکسی که میخواهیم از آن برای ترسیم استفاده کنیم.دوم و سوم برای نقطه شروع ترسیم .چهارم و پنجم برای اندازه تصویر ترسیمی.ششموهفتم برای نقطه پایان ترسیم.هشتم ونهم برای اندازه های پایانی ترسیم وپارامتر آخر برای نوع ترسیم
پنج شنبه بیست و ششم 10 1387
مبحث امروز که ارتباط داره به خواندن اطلاعات اساسی فایل MP3.متغییر های زیر رو تو اول کد تعریف کنید

Dim HasTag As Boolean
Dim Tagg As String * 3
Dim Songname As String * 30
Dim Artist As String * 30
Dim Album As String * 30
Dim Year As String * 4
Dim Comment As String * 30
Dim Genre As String * 1

البته کد بالا تست شده است مورد کاملش اینهاست ولی نمی دونم جواب بده یانه خودتون امتحان کنید اگه شد بهم بگید -فعلآ استفاده نکنید

Private Type MP3Tag
FullName As String ' Filename and filepath of MP3 file
FileName As String ' Name of MP3 file
Path As String ' Path of MP3 file
title As String * 30
artist As String * 30
album As String * 30
Year As String * 4
Comment As String * 30
Genre As String * 20
TagPresent As Boolean
MPEGVersion As String * 3 ' Version 1.0, 2.0 or 3.0
Layer As String * 1 ' Layer 1, 2 or 3
Protection As Boolean ' 0=CRC is present, 1=Not Protected
BitRate As String * 3 ' Recording bitrate
SampleRate As String * 5 ' Sampling Frequency
Padding As Integer ' 0=Frame is not padded, 1=(32bits for Layer 1, 8bits for Layer 2/3)
PrivateBit As Integer ' Not used. Do what you want with it
ChannelMode As String * 12 ' 00=Stereo, 01=Joint Stereo, 10=Dual Channel Stereo, 11=Mono
ModeExtension As String * 2 ' Used only for Joint Stereo
Copyright As Boolean ' Is file copyrighted?
Original As Boolean ' Is file on original media?
Emphasis As String * 8 ' Emphasis setting (usually none (00))
FrameLength As Integer ' Calculated from BitRate, SampleRate and Padding
TotalFrames As Long ' Filelength/Framelength
PlayTime As Single ' Calculated from TotalFrames, SampleRate and Stereo?
ValidHeader As Boolean ' True=Valid Header found, False=Not an MP3 file
End Type

بعد یک پروسیجر به این صورت تعریف می کنیم تاهر وقت بهش یک نام فایل پاس دادیم متغییر هامون پر بشه از اطلاعت فایل

Private Sub GetTag(Filename)
Open Filename For Binary As #1
Get #1, FileLen(Filename) - 127, Tagg
If Not Tagg = "TAG" Then
Close #1
HasTag = False
Songname = "No Tag Found"
Artist = "No Tag Found"
Album = "No Tag Found"
Year = "None"
Comment = "No Tag Found"
Genre = "0"
Exit Sub
End If
HasTag = True
Get #1, , Songname
Get #1, , Artist
Get #1, , Album
Get #1, , Year
Get #1, , Comment
Get #1, , Genre
Close #1
End Sub

حالا به این صورت میشه ازش استفاده کرد

Me.GetTag(MP3 FileName)

به طور معمول وقتی فایل به صورت باینری باز می شه چیزی جز صفر و یک رو نمشه از توش خواند به همین دلیل این نوع باز کردن فایل رو تصویر آینه وار حافظه می گن.چون هر چی روی هارد نوشته همون رو دودستی تحویلت می ده!از این رو باید همیشه بعد از خواندن این نوع فایل ها اونارو از فرمت باینری در آورد با تابع زیر که ازقبل توی وی بی هست

Src(Your Ascii Word)

اگه رشته رو با(String *30)ولی در برنامه بالا چون اندازه رشته رو تعریف کردیم

یک کد اسکی مقدار دهی کنیم خود به خود هنگام چاپ به فرم رشته ی معمولی در میاد

در دستور بالا ما با علامت ضربدر به وی بی می گوییم که چه مقدار حافظه را برای متغییر ما نگه دارد ولی اگر این مورد را استفاده نکنیم وی بی به صورت اتوماتیک سایز رشته رو انتخاب .میکنه اگه رشته کم باشه کم واگر زیاد باشه زیاد براش جا نگه می داره به ازای هر حرف یک بایت
پنج شنبه بیست و ششم 10 1387
کنترل WindowsMediaPlayer که توسط کتابخانه قدرتمندی پشتیبانی می شود را می توان در انواع ویندوز استفاده کرد

نحوه ی استفاده از کنترل. از منوی Components\WindowsMediaPlayer گزینه WindowsMediaPlayer را انتخاب کنید

قبل از اینکه آن کادر را ببندید MicrosoftCommonDialog را هم انتخاب کنید

یک دکمه قرار دهید و کد زیر را درونش وارد کنید

CommonDialog1.ShowOpen
WindowsMediaPlayer1.URL=CommDialog1.FileName

مشاهده می کنید که کادر فایل باز شده و فایل انتخاب شده پخش می شود

private sub Play_Click()
WindowsMediaPlayer1.Controls.Play()
End Sub

'------------------------
Prrivate Sub Stop_Click()
WindowsMediaPlayer1.Controls.Stop()
End Sub

'------------------------
Private Sub Pause_Click()
WindowsMediaPlayer1.Pause()
End Sub

یک تایمر به فرم اضافه کنید و یک HScroll1 و یک Lable
تایمر را به 50 تنظیم کنید.روی تایمر دوبار کلیک کنید وکد زیر را وارد کنید

Private sub Timer1_Timer()
Label1.Caption=WindowsMediaPlayer1.Controls.CurrentPositionString
HScroll1.max=WindowsMediaPlayer1.Controls.CurrentItem
HScrol1.Value=WindowsMediaPlayer1.Controls.CurrentPosition
End Sub
پنج شنبه بیست و ششم 10 1387
یک فرم ایجاد کنید و یه هفت تا لیبل بزارین روش با یه تایمر و یه HScroll
خاصیت Max مربوط به اسکرول رو روی 100 بزارین
خاصیت Interval تایمر رو روی 50 بزارین

این کدها رو اولین خط فرم بنویسید

'----------Type New Data For Memory------------------
Private Type MEMORYSTATUS
dwlength As Long
dwMemoryLoad As Long
dwTotalPhys As Long
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End Type '------------------Declear API Of Kernal Windows Librery-------------
Private Declare Sub GlobalMemoryStatus Lib "KERNEL32" (lpBuffer As MEMORYSTATUS)
Dim Mem As MEMORYSTATUS

روی تایمر دابل کلیک کنید و کد زیر را بنویسید

GlobalMemoryStatus Mem
Me.Caption = Mem.dwMemoryLoad & "% used"
Label1.Caption = "Memory used: " & Mem.dwMemoryLoad & "%"
Label2.Caption = "Total Physical Memory: " & Mem.dwTotalPhys
Label3.Caption = "Available Physical Memory: " & Mem.dwAvailPhys
Label4.Caption = "Page File Bytes: " & Mem.dwTotalPageFile
Label5.Caption = "Available bytes of Page File: " & Mem.dwAvailPageFile
Label6.Caption = "Total Virtual bytes: " & Mem.dwTotalVirtual
Label7.Caption = "Available Virtual Bytes: " & Mem.dwAvailVirtual
HScroll1.Value = Mem.dwMemoryLoad

با کدای بالا می تونین کارکرد CPU و RAM رو مشاهده کنید مثل خود ویندوز
پنج شنبه بیست و ششم 10 1387
چطور میتوان سطل آشغال ویندوز رو خالی کرد

اگه بخواید یک برنامه تقویت ویندوز بنویسید به گزینه خالی کردن سطل آشغال ویندوز نیاز خواهید داشت
سری قبل این اموزش رو در مورد کنترل سی پی یو (تاکس منیگر)ویندوز نوشتم
برای این کار باید از تابعی موجود در کتابخانه قدرتمند شل که در آرشیو اموزشهای زیادی راجع به این کتابخانه هست استفاده کنید

شیوه ی تعریف کتابخانه

Private Declare Function SHEmptyRecycleBin Lib "shell32.dll" Alias "SHEmptyRecycleBinA" (ByVal hWnd As Long, ByVal pszRootPath As String, ByVal dwFlags As Long) As Long
Const SHERB_NOPROGRESSUI = &H2

شیوه ی استفاده

Private Sub Command1_Click()
Dim retvaL
retvaL = SHEmptyRecycleBin(Form1.hWnd, "", SHERB_NOPROGRESSUI)
End Sub
پنج شنبه بیست و ششم 10 1387
کادر خصوصیات اکثرآ در نوشتن یک کاد آرشیو یا لیست فایل کاربرد دارد که شما روی نام فایل راست کلیک می کنید و این گزینه را معمولآ در انتهای لیست انتخاب می کنید واین کادر ظاهر میشود نوشتن چنین کد هایی باعث حرفه شدن برنامه ی شما می گردد

به ماژولمان کد های زیر را اضافه کنید

'------Typing New data For Propertis File---------------------
Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type
'---------------Conset For Propertis Dialog-------------------
Public Const SEE_MASK_INVOKEIDLIST = &HC
Public Const SEE_MASK_NOCLOSEPROCESS = &H40
Public Const SEE_MASK_FLAG_NO_UI = &H400
Public Const ATTR_NORMAL = 0
Public Const ATTR_READONLY = 1
Public Const ATTR_HIDDEN = 2
Public Const ATTR_SYSTEM = 4
Public Const ATTR_VOLUME = 8
Public Const ATTR_DIRECTORY = 16
Public Const ATTR_ARCHIVE = 32
'-----------------------Declareing API------------------------------------------
Declare Function ShellExecuteEX Lib "shell32.dll" Alias _
"ShellExecuteEx" (SEI As SHELLEXECUTEINFO) As Long

'-----------------------------------------------------------------------------------------

Public Function ShowFileProperties(filename As String, OwnerhWnd As Long) As Long
Dim SEI As SHELLEXECUTEINFO
With SEI
.cbSize = Len(SEI)
.fMask = SEE_MASK_NOCLOSEPROCESS Or SEE_MASK_INVOKEIDLIST Or SEE_MASK_FLAG_NO_UI
.hwnd = OwnerhWnd
.lpVerb = "properties"
.lpFile = filename
.lpParameters = vbNullChar
.lpDirectory = vbNullChar
.nShow = 0
.hInstApp = 0
.lpIDList = 0
End With
ShellExecuteEX SEI
ShowFileProperties = SEI.hInstApp
End Function

حالا هر فایلی را که می خواهید خصوصییاتش نمایش داد شود به این تابع به صورت زیر ارسال کنید-پاس دهید

ShowFileProperties(FileName,Me.hwn
پنج شنبه بیست و ششم 10 1387
این کادر استفاده ی بسیار زیادی در برنامه های کاربردی داره.وموقعی استفاده می شه که کار بر باید یک پوشه رو (مثلآ برای نصب برنامه )انتخاب کنه
یک ماژول ایجاد کنید و کد های زبر رابنویسید

'------Typing New data For BrowsForm---------------------
Public Type BrowseInfo
hWndOwner As Long
pIDLRoot As Long
pszDisplayName As Long
lpszTitle As Long
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type

'---------------Conset For BrowsForm--------------------
Public Const BIF_RETURNONLYFSDIRS = 1
Public Const BIF_DONTGOBELOWDOMAIN = 2
Public Const MAX_PATH = 260

'-----------------------Declareing API------------------------------------------
Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long

حال در جایی که می خواهید کادر ظاهر شود کد زیر رابنویسید

Dim lpIDList As Long
Dim sBuffer As String
Dim szTitle As String
Dim tBrowseInfo As BrowseInfo
szTitle = "Select Folder... "
With tBrowseInfo
.hWndOwner = Me.hwnd
.lpszTitle = lstrcat(szTitle, "")
.ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
End With
lpIDList = SHBrowseForFolder(tBrowseInfo)
If (lpIDList) Then
sBuffer = Space(MAX_PATH)
SHGetPathFromIDList lpIDList, sBuffer
sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
msgbox( sBuffer)
End If

در پایان خط م اقبل آخر با یک پیغام مسیر انتخاب شده کاربر اعلام می شود که شما عزیزان می توانید آنرا به دلخواه تغییر دهید
پنج شنبه بیست و ششم 10 1387
اموزش یک کار جالب با فرم ها
تنها با دو خط کد میتونید جلوه ای رو بوجود بیارید که فکرشم نمی کردید. یک فرم رو توی یک فرم دیگه جابدید. استفاده های زیادی میشه ازش کرد. مثلا ساخت نوار ابزارهایی مثل اونی که فتوشاپ داره. راجع بهش فکر کنید
این هم کدش

Private Declare Function SetParent Lib "user32" ( _
ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

Private Sub Form_Load()
SetParent Form2.hWnd, hWnd
Form2.Show
End Sub
پنج شنبه بیست و ششم 10 1387
اول فراخوانی توابع

Option Explicit
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

بعد سه تا کامند برای ظاهر کردن آیکون ها مخفی کردن آنها و خروج از فرم بنویسید

کد هر کدام اینطور است

Private Sub cmdDHide_Click()
Dim hWnd As Long
hWnd = FindWindowEx(0&, 0&, "Progman", vbNullString)
ShowWindow hWnd, 0
End Sub'--------------------------------
Private Sub cmdDShow_Click()
Dim hWnd As Long
hWnd = FindWindowEx(0&, 0&, "Progman", vbNullString)
ShowWindow hWnd, 5
End Sub'---------------------------------
Private Sub cmdExit_Click()
Me.Hide
End
End Sub'-------------------------------------
پنج شنبه بیست و ششم 10 1387
این کد رو هم توی پروژه دیگه تست کنید - تاریخ فارسی

MsgBox WeekdayName(Weekday(Date), False, vbSunday) & ", " & VBA.MonthName(VBA.Month(Date)) & " " & Day(Date) & ", " & VBA.Year(Date), vbOKOnly + vbInformation, "The date
پنج شنبه بیست و ششم 10 1387
البته حتما باید سریع به حالت قبل برگردونید چون موندن این حالت زیاد جالب نیست

Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" _
(ByVal uAction As Long, ByVal uParam As Long, lpvParam As Any, ByVal fuWinIni As Long) As Long

Private Const SPI_SCREENSAVERRUNNING = 97

حالا دو تا کامند به فرم اضافه کنید به اسم های Desabled و Enabled

کد دکمه غیر فعال کردن

Private Sub Disabled_Click()
Dim Ret As Long
Dim pOld As Boolean
Ret = SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, pOld, 0)
End Sub

کد فعال سازی این کلید ها بهتر است این کدها را در Unload فرم نیز فراخوانی کنید

Private Sub EnableD_Click()
Dim Ret As Long
Dim pOld As Boolean
Ret = SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, pOld, 0)
End Sub
پنج شنبه بیست و ششم 10 1387
چطور می شه دکمه بستن پنجره در گوشه فرم رو غیر فعال کرد
شاید غیر فعال کرد دکمه های تمام صفحه و کمینه رو بلد باشین ولی
دیگه فرم خاصیت غیر فعال کردن دکمه close رو نداره مگه کنترل بوکس فرم رو
برداریم یا اصلآ فرم رو از نوع بدون منوی بالا وتیتر انتخاب کنیم
ولی با این کد می تونین با داشتن تمام کنترل ها فقط دکمه کلوز رو غیر فعال کنین
تابع زیر رو تعریف کنید

Public Const SC_CLOSE = &HF060
Public Const MF_BYCOMMAND = &H0
Public Declare Function GetSystemMenu Lib "user32" _
(ByVal hwnd As Long, ByVal bRevert As Long) As Long
Public Declare Function DeleteMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long

Public Sub DisableXbutton(ByVal frmHwnd As Long)
Dim hMenu As Long
hMenu = GetSystemMenu(frmHwnd, 0&)
If hMenu Then
Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
DrawMenuBar (frmHwnd)
End If
End Sub

حالا کد زیر رو داخل Form_Load بنویسید

DisableXbutton (Me.hwnd)
پنج شنبه بیست و ششم 10 1387
مخفی کردن منوی Start
برای مخفی کردن منوی Start به یک تابع از کتابخانه user32.dll احتیاج دارید

Option Explicit

Dim hwnd1 As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Const SWP_HIDEWINDOW = &H80
Const SWP_SHOWWINDOW = &H40

حالا باید دو تا دکمه برای مخفی و آشکار کردن منوی Startبه فرم اضافه کنید

کد مخفی کردن Start
Hwnd1=FindWindow("Shell_traywnd","")
call SetWindowPos(Hwnd1,0,0,0,0,0,SWP_HIDEWINDOW)

کد ظاهر کردن Start
call SetWindowPos(Hwnd1,0,0,0,0,0,SWP_SHOWWINDOW)

*****************************
آیکون یک برنامه رو از کالبدش کشید بیرون و به صورت فایل آیکون ذخیره کرد
این آموزش از سری آموزشی کتابخانه قدرتمند Shell هست
یک ماژول به پروژه اضافه کنید و کد زیر را داخلش کپی کنید

Public Const MAX_PATH = 260
Public Const SHGFI_DISPLAYNAME = &H200
Public Const SHGFI_EXETYPE = &H2000
Public Const SHGFI_SYSICONINDEX = &H4000 ' System icon index
Public Const SHGFI_LARGEICON = &H0 ' Large icon
Public Const SHGFI_SMALLICON = &H1 ' Small icon
Public Const ILD_TRANSPARENT = &H1 ' Display transparent
Public Const SHGFI_SHELLICONSIZE = &H4
Public Const SHGFI_TYPENAME = &H400
Public Const BASIC_SHGFI_FLAGS = SHGFI_TYPENAME _
Or SHGFI_SHELLICONSIZE Or SHGFI_SYSICONINDEX _
Or SHGFI_DISPLAYNAME Or SHGFI_EXETYPE

Public Type SHFILEINFO
hIcon As Long
iIcon As Long
dwAttributes As Long
szDisplayName As String * MAX_PATH
szTypeName As String * 80
End Type

Public Declare Function SHGetFileInfo Lib "shell32.dll" Alias "SHGetFileInfoA" _
(ByVal pszPath As String, _
ByVal dwFileAttributes As Long, _
psfi As SHFILEINFO, _
ByVal cbSizeFileInfo As Long, _
ByVal uFlags As Long) As Long

Public Declare Function ImageList_Draw Lib "comctl32.dll" _
(ByVal himl&, ByVal i&, ByVal hDCDest& _
,ByVal x&, ByVal y&, ByVal flags&) As Long
Public shinfo As SHFILEINFO

یه دکمه به برنامه اضافه کنید و یک texbox و با دو تا picbox و دو تا برچسب
و اینکه نام picbox ها رو image1 و image2 قرار بدهید
آدرس فایل اجرایی را داخل texbox بنویسید و در کد کلیک دکمه کد زیر را بنویسید

Dim hImgSmall As Long
Dim hImgLarge As Long
Dim FileName As String
Dim r As Long

FileName$ = Text1.Text
hImgSmall& = SHGetFileInfo(FileName$, 0&, shinfo, Len(shinfo), BASIC_SHGFI_FLAGS Or SHGFI_SMALLICON)
hImgLarge& = SHGetFileInfo(FileName$, 0&, shinfo, Len(shinfo), BASIC_SHGFI_FLAGS Or SHGFI_LARGEICON)
Label1.Caption = Left$(shinfo.szDisplayName, InStr(shinfo.szDisplayName, Chr$(0)) - 1)
Label2.Caption = Left$(shinfo.szTypeName, InStr(shinfo.szTypeName, Chr$(0)) - 1)

image1.Picture = LoadPicture()
image2.Picture = LoadPicture()

r& = ImageList_Draw(hImgSmall&, shinfo.iIcon, image1.hDC, 0, 0, ILD_TRANSPARENT)
r& = ImageList_Draw(hImgLarge&, shinfo.iIcon, image2.hDC, 0, 0, ILD_TRANSPARENT
پنج شنبه بیست و ششم 10 1387
تبدیل رادیان به درجه

چون اکثر توابع مثلثاتی بر حسب رادیان کار می کنند گاهی اوقات نیاز داریم تا زوایا را از در جه به رادیان و بالعکس تبدیل کنیم. برای تبدیل یک زاویه بر حسب رادیان به درجه، آنرا در 180 ضرب کرده و سپس بر عدد پی تقسیم می‌کنیم:

Degree(x) = x * 180 / Pi
برای تبدیل یک زاویه بر حسب درجه به رادیان، آنرا در عدد پی ضرب کرده و سپس بر 180 تقسیم می‌کنیم:
Rad(x) = x * Pi / 180

*******************************
یک سری کدهای اماده ویژوال بیسیک براتون میزارم تا تمرین کنید

'frmtrst:
'give the nomber of numbers
'give n numbers
'get average

Option Explicit

Private Sub cmdcalculate_Click()
Dim totcount, totnum, ncount, inputno As Integer
Dim naver As Single
lbldisp.Caption = ""

totcount = Val(txtcount.Text)
Do While ncount < totcount
inputno = InputBox("Enter a no ", "input no")
ncount = ncount + 1
totnum = totnum + inputno
Loop
If totcount > 0 Then
naver = totnum / ncount
End If
lbldisp.Caption = "The average is " & naver
txtcount.Text = ""
End Sub

*******************************
'frm421
'10*10 stars
Option Explicit

Private Sub cmdstar_Click()
Dim i As Integer

For i = 1 To 100
Print "*";
If i Mod 10 = 0 Then
Print
End If
Next i

End Sub

*******************************
'frm0605
'the most little
Option Explicit

Private Sub cmdsmall_Click()
Dim val1 As Long, val2 As Long, val3 As Long
val1 = txtone.Text
val2 = txttwo.Text
val3 = txtthree.Text
Call minimum(val1, val2, val3)
End Sub

Private Sub minimum(min As Long, y As Long, z As Long)
If y < min Then
min = y
End If
If z < min Then
min = z
End If
lblsmall.Caption = "smallest value is " & min
End Sub

*******************************
'count & print even
'frm0703
Option Explicit

Private Sub cmdprint_Click()
Dim s(9) As Integer
Dim x As Integer
Cls
For x = LBound(s) To UBound(s)
s(x) = 2 + 2 * x
Next x
For x = LBound(s) To UBound(s)
Print Space$(2) & x & Space$(7) & s(x)
Next x
End Sub

*******************************
'frm0706
Option Explicit
Dim marray(-5 To 5) As Integer

Private Sub cmdarray_Click()
Dim x As Integer
Call initialize
Call modifyarray(marray())
Call printmodified
End Sub

Private Sub cmdelement_Click()
Dim x As Integer
Call initialize
For x = LBound(marray) To UBound(marray)
Call modifyelement(marray(x))
Next x
Call printmodified
End Sub

Private Sub cmdexit_Click()
End
End Sub

Private Sub initialize()
Dim x As Integer
lstoriginal.Clear
lstmodified.Clear
For x = LBound(marray) To UBound(marray)
marray(x) = x
lstoriginal.AddItem marray(x)
Next x

End Sub
Private Sub printmodified()
Dim x As Integer
For x = LBound(marray) To UBound(marray)
lstmodified.AddItem marray(x)
Next x
End Sub

Private Sub modifyarray(a() As Integer)
Dim x As Integer
For x = LBound(a) To UBound(a)
a(x) = a(x) * 2
Next x
End Sub

Private Sub modifyelement(element As Integer)
element = element * 5
End Sub

*******************************
'frmboolean
Option Explicit

Private Sub cmdprint_Click()
Dim bool As Boolean
Dim x As Integer
x = -1
Print "x" & vbTab & "bool"
Do Until x = 10
bool = x
Print x & vbTab & bool
x = x + 1
Loop
Print
bool = True
Print bool
bool = False
Print bool
End Sub

*******************************

'frmsecurity
Option Explicit

Dim maccesscode As Long

Private Sub cmd3_Click()
txtdisplay.Text = txtdisplay.Text & "3"
End Sub

Private Sub cmd4_Click()
txtdisplay.Text = txtdisplay.Text & "4"
End Sub

Private Sub cmd5_Click()
txtdisplay.Text = txtdisplay.Text & "5"
End Sub

Private Sub cmd6_Click()
txtdisplay.Text = txtdisplay.Text & "6"
End Sub

Private Sub cmd7_Click()
txtdisplay.Text = txtdisplay.Text & "7"
End Sub

Private Sub cmd8_Click()
txtdisplay.Text = txtdisplay.Text & "8"
End Sub

Private Sub cmd9_Click()
txtdisplay.Text = txtdisplay.Text & "9"
End Sub

Private Sub cmdclear_Click()
txtdisplay.Text = ""
End Sub

Private Sub cmdenter_Click()
Dim message As String
lstlongentery.Clear
maccesscode = Val(txtdisplay.Text)
txtdisplay.Text = ""
Select Case maccesscode
Case Is < 1000
message = "Aceess Denied "
Beep
Case 1645 To 1689
message = "Technican personnel"
Case 8345
message = "Custodial Services"
Case 55875
message = "Special Services"
Case 999898, 1000006 To 1000008
message = "Scientific Personal"
Case Else
message = "Acess DEnied "
End Select

lstlongentery.AddItem Now & Space$(3) & message

End Sub

Private Sub cmdone_Click()
txtdisplay.Text = txtdisplay.Text & "1"
End Sub

Private Sub cmdzero_Click()
txtdisplay.Text = txtdisplay.Text & "0"
End Sub
Private Sub cmd2_Click()
txtdisplay.Text = txtdisplay.Text & "2"
End Sub

*******************************
'frmfig0614
Option Explicit

Private Sub cmddivide_Click()
Dim numerator As Integer, denominator As Integer
Dim result As String
numerator = txtnum.Text
denominator = txtden.Text
result = divide(numerator, denominator)
If result = "" Then
lblthree.Caption = "divide by zero"
Else
lblthree.Caption = result
End If

End Sub

Private Function divide(n As Integer, d As Integer) As String
If d = 0 Then
Exit Function
Print "after exit function "
Else
divide = "division yields " & n / d
End If

End Function

*******************************

'frmfig0310
Option Explicit
Dim sum As Integer
Private Sub cmdadd_Click()
sum = sum + txtinput.Text
txtinput.Text = ""
txtsum.Text = sum
End Sub

Private Sub cmdexit_Click()
End
End Sub

*******************************
'frmdraw
Option Explicit

Private Sub cmddraw_Click()
Dim side As Integer, row As Integer, column As Integer
side = txtinput.Text
Cls
If side <= 12 Then
If side > 0 Then
row = 1
While row <= side
column = 1
While column <= side
If row = 1 Or row = side Or column = 1 Or column = side Then

Print "<-PostContent->quot;;
Else
Print "&";
End If
column = column + 1
Wend
Print
row = row + 1
Wend

Else
Print "side too small "
Beep
End If
Else
Print "side too large "
Beep
End If
End Sub

*******************************
'frmdisplay
Option Explicit

Private Sub cmdprint_Click()
Dim counter As Integer
txtinput.SetFocus
counter = 0
counter = Val(txtinput.Text)
lbldisplay.Caption = ""
'txtinput.SetFocus
Do While counter > 0
lbldisplay.Caption = lbldisplay.Caption & "#"
counter = counter - 1
Loop
End Sub

*******************************
'frmcompund
Option Explicit

Private Sub cmdcal_Click()
Dim years As Integer
Dim interestrate As Double
Dim amount As Currency
Dim principal As Currency
lstdisplay.Clear
years = 10
principal = txtamount.Text
interestrate = txtinterest.Text / 100
lstdisplay.AddItem "year " & vbTab & "amount on deposit"
For years = 1 To 10
amount = principal * (1 + interestrate) ^ years
lstdisplay.AddItem Format$(years, "@@@@") & vbTab & Format$(Format$(amount, "currency"), _
String$(17, "@"))

Next years
End Sub

Private Sub cmdexit_Click()
End
End Sub
پنج شنبه بیست و ششم 10 1387
با این برنامه می تونین دو تا تصویر رو روی هم بندازید و حرکت بدین
تصاویرتون باید JPG باشه و بزرگ نباشه.دستورات زیر رو در قسمت General فرم بنویسید

Dim Image1 As IPictureDisp
Dim Image2 As IPictureDisp

Private Type Location
X As Integer
Y As Integer
End Type

Dim Image1Move As Integer
Dim Image2MoveX As Integer
Dim Image2MoveY As Integer
Dim Image1Local As Location
Dim Image2Local As Location
Const Operation = vbSrcAnd

دو تا عکس رو در مسیر برنامه کپی کنید اسمشون هم 1 و 2 باشه

کد زیر برای Form_Load هست

("Set Image1 = LoadPicture(App.Path & "\Image1.jpg
("Set Image2 = LoadPicture(App.Path & "\Image2.jpg
With me
.Show
Refresh.
.AutoRedraw = True
.ScaleMode = vbPixels
End With

Image1Move = 1
Image2MoveX = 3
Image2MoveY = 3

Do
me.PaintPicture Image1, Image1Local.X, Image1Local.Y
me.PaintPicture Image1, Image1Local.X + me.ScaleWidth, Image1Local.Y
me.PaintPicture Image1, Image1Local.X, Image1Local.Y + me.ScaleHeight
me.PaintPicture Image1, Image1Local.X + me.ScaleWidth, Image1Local.Y + me.ScaleHeight

me.PaintPicture Image2, Image2Local.X, Image2Local.Y, , , , , , , Operation
me.PaintPicture Image2, Image2Local.X + me.ScaleWidth, Image2Local.Y, , , , , , , Operation
me.PaintPicture Image2, Image2Local.X, Image2Local.Y + me.ScaleHeight, , , , , , , Operation
me.PaintPicture Image2, Image2Local.X + me.ScaleWidth, Image2Local.Y + me.ScaleHeight, , , , , , , Operation

With Image1Local
.X = .X - Image1Move
.Y = .Y - Image1Move

If .X < -me.ScaleWidth Then .X = 0
If .Y < -me.ScaleHeight Then .Y = 0
End With

With Image2Local
.X = .X - Image2MoveX
.Y = .Y - Image2MoveY

If .X < -me.ScaleWidth Then .X = 0
If .Y < -me.ScaleHeight Then .Y = 0

If .X + me.ScaleWidth > me.ScaleWidth Then .X = -me.ScaleWidth
If .Y + me.ScaleHeight > me.ScaleHeight Then .Y = -me.ScaleWidth
End With

DoEvents
Loop

برای اینکه دستورات بالا داخل یک حلقه بی پایان قرار می گیره باید در رویداد کلیک فرم بنویسید
End

فرم رو زیاد بزرگ نکنید سعی کنید تصویرها هم اندازه باشند و فرم هم اندازه تصویر ها
برای اینکه در حرکت عکس ها تنوع ایجاد کنیم در رویداد MouseMove فرم دستور زیر رو بنویسید

Image2MoveX = Int(me.ScaleWidth \ 2 - X) \ 10
Image2MoveY = Int(me.ScaleWidth \ 2 - Y) \ 10

موفق باشید

*****************************
پنج شنبه بیست و ششم 10 1387
بستن پنجره با گرفتن عنوان ان

اگر کاربر پنجره ای رو که شما تعیین می کنید رو باز کنه برنامه اون فرم رو می بنده.

در اینجا ما از دو تا تابع API استفاده می کنیم که عبارتند از : FindWindowA برای پیدا کردن پنجره مورد نظر و SetForegroundWindow برای فعال کردن پنجره مورد نظر که هر دوی این توابع در فایل user32.dll تعریف شده اند.

اول برای تعریف توابع فوق خطوط زیر رو در قسمت General وارد کنید :

Private Declare Function FindWindowA Lib "user32.dll" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Dim Temp As Long

حالا روی فرمتون یه Timer قرار بدین و خاصیت Interval اون رو به 50 تغییر بدید، بعد روی اون دابل کلیک کنید و کد های زیر رو در Sub مربوط به Timer قرار بدین:

Temp = FindWindowA(vbNullString, "My Computer")
If Temp <> 0 Then
SetForegroundWindow (Temp)
SendKeys "%{F4}"
End If

دستور اول هندل ( لازم به ذکر است که سیستم عامل به هر کنترلی و به هر فرمی شماره ای اختصاص می ده که به این شماره میگن هندل) پنجره ای رو که ( در اینجا ) عنوانش My Computer باشد رو در متغیر Temp می ریزد. شرط بعدی چک می کند که پنجره مورد نظر پیدا شده یا نه که در صورت برقراری این شرط با تابع SetForegroundWindow (که آرگومانش همون شماره ای باید باشه که با تابع FindWindowA پیدا کردیم) پنجره پیدا شده رو فعال می کنه و در نهایت تابع SendKeys زهر خودش رو می ریزه و با ارسال یک کلید میانبر به نام Alt+F4 کاربر عزیز رو در باز کردن پنجره مورد نظرش ناکام می کنه!

*******************************
بدست آوردن IP و نام سیستم میزبان

برای امروز قصد دارم یک پروژه ساده را به شما معرفی کنم.

شما ظرف چند دقیقه میتوانید این پروژه را در ویژوال بیسیک بسازید.

ابتدا ویژوال بیسیک را باز کنید سپس کنترلر های زیر را روی فرم قرار دهید :

دو عدد TextBox و دو عدد WinSock

حالا روی فرم دو بار کلیک کرده و در رویداد لود فرم کدهای زیر را وارد کنید :

Text1.Text = Winsock1.LocalIP
Text2.Text = Winsock2.LocalHostName

برنامه را اجرا کنید . این برنامه آی پی و پورت سیستم میزبان را در اختیار شما قرار میدهد.
لازم به ذکر است بعدا که به مرحله ساخت اسب های تراوا رسیدیم
خدمت شما عرض خواهم کرد که کاربرد این برنامه در هک سیستم قربانیان چیست

*******************************
پنج شنبه بیست و ششم 10 1387
سوال :دستوری می خوام که بتونم یک کلمه را توی یک فیلد بانک اطلاعاتی جستجو کنم نه اینکه اون کلمه اول نوشته باشه . این کلمه ممکنه وسط هم نوشته شده باشه

برای کاری که می خوای انجام بدی باید از دستورات SQL استفاده کنی.

اگر از کامپونت ADO استفاده می کنی دستور جستجوش به این شرحه :

Ado1.RecordSource= "Select * From [your table] Where [your field] Like ('%متن مورد نظر برای جستجو%')"

ولی اگر از کامپونت Data استفاده می کنی دستورش اینطوری می شه :

Data1.RecordSource= "Select * From [your table] Where [your field] Like ('*متن مورد نظر برای جستجو*')"

مثال : مثلا من یک Table با نام Table1 و یک فیلد به نام Address دارم و می خوام تمام آدرسهایی که توشون ( تهران ) داره پیدا کنم ، حالا این کلمه می خواد هرجایی از فیلد باشه :

Ado1.CommandType = adCmdText

Ado1.RecordSource= "Select * From Table1 Where Address Like ('%تهران%')"

Ado1.Refresh
*******************************
بستن پنجره با گرفتن عنوان ان

اگر کاربر پنجره ای رو که شما تعیین می کنید رو باز کنه برنامه اون فرم رو می بنده.

در اینجا ما از دو تا تابع API استفاده می کنیم که عبارتند از : FindWindowA برای پیدا کردن پنجره مورد نظر و SetForegroundWindow برای فعال کردن پنجره مورد نظر که هر دوی این توابع در فایل user32.dll تعریف شده اند.

اول برای تعریف توابع فوق خطوط زیر رو در قسمت General وارد کنید :

Private Declare Function FindWindowA Lib "user32.dll" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Dim Temp As Long

حالا روی فرمتون یه Timer قرار بدین و خاصیت Interval اون رو به 50 تغییر بدید، بعد روی اون دابل کلیک کنید و کد های زیر رو در Sub مربوط به Timer قرار بدین:

Temp = FindWindowA(vbNullString, "My Computer")
If Temp <> 0 Then
SetForegroundWindow (Temp)
SendKeys "%{F4}"
End If

دستور اول هندل ( لازم به ذکر است که سیستم عامل به هر کنترلی و به هر فرمی شماره ای اختصاص می ده که به این شماره میگن هندل) پنجره ای رو که ( در اینجا ) عنوانش My Computer باشد رو در متغیر Temp می ریزد. شرط بعدی چک می کند که پنجره مورد نظر پیدا شده یا نه که در صورت برقراری این شرط با تابع SetForegroundWindow (که آرگومانش همون شماره ای باید باشه که با تابع FindWindowA پیدا کردیم) پنجره پیدا شده رو فعال می کنه و در نهایت تابع SendKeys زهر خودش رو می ریزه و با ارسال یک کلید میانبر به نام Alt+F4 کاربر عزیز رو در باز کردن پنجره مورد نظرش ناکام می کنه!

*******************************
پنج شنبه بیست و ششم 10 1387
توابع SaveSetting و GetSetting

» وقتی شما برنامه ای مانند ویژوال بیسیک را اجرا می کنید و در محیط کاری آن تغییراتی ایجاد می نمایید ، این تغییرات برای اجرای بعدی برنامه ثبت می شوند . برای مثال اگر شما ToolBox وی بی را مخفی کنید در اجرای بعدی آن ToolBox نمایش داده نخواهد شد . این امر در بسیاری از برنامه های دیگر نیز صدق میکند . این تغییرات که در اصطلاح ( Setting ) نام دارند یا در رجیستری یا در یک فایل ذخیره می شوند . خود VB این تغییرات را در رجیستری ثبت میکند و هنگام اجرا محیط خود را بر اساس این داده ها تنظیم می نماید .

» هنگامی که کلمه رجیستری در VB به گوش برنامه نویسان می رسد سریع ذهن آنها را متوجه توابع پیچیده API مربوط به کار با رجیستری می کند . برای همین من امروز می خواهم روش ذخیره کردن تنظیمات یک برنامه در رجیستری را بدون استفاده از توابع پیچیده مخصوص کار با رجیستری به وسیله دو تابع بسیار ساده مخصوص این کار به شما معرفی کنم :

» تابع SaveSetting : برای ساخت کلید و ذخیره کردن اطلاعات در رجیستری .

( SaveSetting ( AppName As String , Section As String , Key As String , Setting As String

_ AppName : این پارامتر مشخص کننده نام برنامه ( پروژه ) است . البته هر نوشته دیگری هم می تواند باشد که نام کلید اصلی در رجیستری را مشخص می کند .

_ Section : این پارامتر نا کلید زیر شاخه است که بیشتر از نام Setting برای آن استفاده می کنند .

_ Key : این پارامتر مشخص کننده نام کلید از نوع String است که داده ها در آن ذخیره می شوند .

_ Setting : این پارامتر هم که اصلی ترین بخش است همان داده یا مقداری است که در کلید ذخیره می شود .

» برای مثال : تابع با پارامتر های ورودی زیر مقدار رشته ( "1" ) را در کلید SampleKey ذخیره می کند .

"SaveSetting "Test" , "Setting" , "SampleKey" , "1

_ شاید از خودتان بپرسید که مسیر این کلید در رجیستری چگونه است . کلیه این کلیدها و مقادیر که ایجاد می شوند در آدرس زیر قرار می گیرند و ما نمی توانیم از آدرس دیگری استفاده نماییم :

\HKEY_CURRENT_USER\Software\VB and VBA Program Settings

در مثال قبلی مقادیر در شاخه زیر ذخیره می شوند که شما می توانید با مراجعه به آن به این مطلب پی ببرید :

HKEY_CURRENT_USER\Software\VB and VBA Program Settings\Test\Setting

» تابع GetSetting : برای خواندن اطلاعات از رجیستری .

(GetSetting ( AppName As String , Section As String , Key As String , Setting As String

_ پارامتر های این تابع به جز گزینه آخر که در این تابع جایی ندارد دقیقا شبیه به هم هستند :

( " KeyValue = GetSetting ( " Test" , "Setting" , "SampleKey

_ در این مثال مقدار ( 1 ) را که قبلا با تابع قبلی در کلید SampleKey قرار دادیم درون متغیر KeyValue قرار می گیرید .

» برنامه نمونه : حال می خواهیم برنامه جالبی با استفاده از این توابع معرفی شده بنویسیم .

شرح برنامه : می خواهیم برنامه ای بنویسیم که دارای تعداد مشخص اجرا باشد . یعنی کاربر فقط بتواند پنج بار این برنامه را اجرا کند و در هر بار اجرای آن پیغامی مبنی بر تعداد باقیمانده دفعات اجرا برای کاربر نمایش داده شود و هنگامی که این تعداد به پایان رسید پیغامی نمایش داده شود که دیگر کاربر نمی تواند این برنامه را اجرا نماید . مانند برنامه هایی که دارای قفل یا به اصطلاح رجیستری هستند .

_ برای این کار شما فقط کافی است کدهای زیر را در Form_Load برنامه خود قرار دهید :

()Private Sub Form_Load
Dim RunCount As String
( "RunCount = GetSetting("Test", "Setting", "RunCount
If Val(RunCount) > 5 Then

_,"مهلت اجرای برنامه به پایان رسیده و شما دیگر قادر به اجرای آن نخواهید بود"MsgBox vbExclamation , "اتمام مهلت"

End
Else

_ ,"شما فقط " & ((Str(4 - Val(RunCount & " بار دیگر می توانید این برنامه را اجرا کنید" MsgBox

vbInformation, "تعداد اجرای باقیمانده"

(SaveSetting "Test", "Setting", "RunCount", Str(Val(RunCount) + 1
End If
End Sub

حال فایل exe از برنامه خود بسازید و آن را اجرا نمایید

*******************************
پنج شنبه بیست و ششم 10 1387
چگونه مسیر نصب ویندوز را پیدا کنیم :

Public Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long

Public Function WinDir() As String
Dim Wind As String
Wind = Space(500)
Wind = Left(Wind, GetWindowsDirectory(Wind, Len(Wind)))
WinDir = Wind
End Function

*******************************
یکی از دوستان سوال کرده بودند که "چه جوری میشه برنامه خودشو کپی کنه تو فولدر StartUp ویندوز؟"
خوب شما باید از دستور FileCopy استفاده کنید به این ترتیب:

FileCopy App.Path + "\" + App.EXEName + ".exe", "Windows Drive\Documents and Settings\User Name\Start Menu\Programs\Startup" + "\" + App.EXEName + ".exe" 'Copy Function

در این دستور که دستور کپی میباشد به جای:
Windows Drive درایو ویندوز را قرار دهید

User Name نام کاربر را بنویسید البته میتوانید از کلمه All Users نیز استفاده کنید که مخصوص تمام کاربران میباشد(نتیجه این کار را پس از رستارت میبینید)

در اینجا :

App.Path یعنی از درایو تا فولدر برنامه
App.EXEName یعنی نام فایل برنامه
".exe" به دلیل اینکه پسوند فایل نیز به دستور اضافه شود میباشد

*******************************
ساختن جدول در بانک اطلاعاتی

از منوی project گزینه refrences رو انتخاب کنید - بعد اونجا گزینه Microsoft ActiveX Data Objects 2.0 library پیدا کنیدو تیک بزنید - Adodc مورد نظرتون رو هم با دیتابیس set کنید - بعد :

Dim db_file As String
Dim conn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim NumRec As Integer

Set conn = New ADODB.Connection
conn.ConnectionString = Adodc1.ConnectionString
conn.Open

On Error Resume Next
conn.Execute "DROP TABLE Jadid"
On Error GoTo 0

conn.Execute "CREATE TABLE Jadid(" & "One INTEGER NOT NULL," & "Two VARCHAR(40) NOT NULL," & "Three VARCHAR(40) NOT NULL)"

conn.Execute "INSERT INTO Jadid VALUES (1,'4','7')"
conn.Execute "INSERT INTO Jadid VALUES (2,'5','8')"
conn.Execute "INSERT INTO Jadid VALUES (3,'6','9')"

Set rs = conn.Execute("SELECT COUNT (*) FROM Jadid")
NumRec = rs.Fields(0)

conn.Close

MsgBox "Created ... "

*******************************
پنج شنبه بیست و ششم 10 1387

تا حالا فکر کردی آرامش یعنی چی؟ یعنی اینکه همیشه ته دلت مطمئن باشی که توی سینه کسی که دوستش داری یه جای گرم داری حتی اگه اصلاً مال تو نشه...

a.sh

دسته ها : عاشقانه
پنج شنبه بیست و ششم 10 1387

کلید قلب ، زندگی و روح من ... همه در دستان اوست . او مالک آن است فقط باید کلید را بچرخاند و بگذارد تا با تمامی شور و عشقم او را در بر گیرم

a.sh

دسته ها : عاشقانه
پنج شنبه بیست و ششم 10 1387
X